package com.itheima.controller;

import com.itheima.Service.EmpService;
import com.itheima.entity.*;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

//@Slf4j
@RestController
public class EmpController {
    private static final org.slf4j.Logger log = LoggerFactory.getLogger(EmpController.class);

    @Autowired
    private EmpService empService;

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @return
     */
//    @GetMapping("/emps")
//    public Result page(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize) {
//        log.info("page = {}, pageSize = {}", page, pageSize);
//        PageBean pagebean = empService.page(page, pageSize);
//        return Result.success(pagebean);
//    }

    /**
     * 分页查询 方式一
     * @param page
     * @param pageSize
     * @return
     */
//    @GetMapping("/emps")
//    public Result page(String name, Integer gender,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate begin,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate end,
//                       @RequestParam(defaultValue = "1") Integer page,
//                       @RequestParam(defaultValue = "10") Integer pageSize) {
//        log.info("(name, gender, begin, end, page, pageSize) = {}, {}, {}, {}, {}, {}", name, gender, begin, end, page, pageSize);
////        PageBean pagebean = empService.page(page, pageSize);
//        return Result.success();
//    }

    @GetMapping("/emps")
    public Result page(EmpQueryParam param) {
        log.info("(name, gender, begin, end, page, pageSize) = {}, {}, {}, {}, {}, {}",
                param.getName(), param.getGender(), param.getBegin(), param.getEnd(), param.getPage(), param.getPageSize());
        PageBean pagebean = empService.page(param);
        return Result.success(pagebean);
    }

    /**
     * 新增员工信息-put方式
     * @Emp emp
     * @return
     */
    @PostMapping("/emps")
    public Result add(@RequestBody Emp emp) throws Exception {   // 获取JSON对象
        log.info("新增员工: {}",emp);
        empService.add(emp);
        return Result.success();
    }
//    @PostMapping("/emps")
//    public Result save(@RequestBody Emp emp) throws Exception {
//        log.info("新增员工：{}", emp);
//        empService.save(emp);
//        return Result.success();
//    }

    /**
     * 删除员工信息
     * @param ids
     * @return
     */
//    @DeleteMapping("/emps")
//    public Result delete(Integer[] ids) {    // 方式一
//        log.info("删除员工：{}", Arrays.toString(ids));
//        // empService.delete(ids);
//        return Result.success();
//    }
    @DeleteMapping("/emps")
    public Result delete(@RequestParam List<Integer> ids) {  // 方式二
        log.info("删除员工：{}", ids);
        empService.delete(ids);
        return Result.success();
    }

    /**
     * 根据id查询员工信息
     * @param id
     * @return
     */
    @GetMapping("/emps/{id}")
    public Result getByID(@PathVariable Integer id) {
        // 方式一
          log.info("查询员工：{}",id);
//        Emp emp = empService.getById(id);
//        return Result.success(emp);

        // 方式二
        // 1.查询员工的基本信息 emp
        Emp emp = empService.getById2(id);

        return Result.success(emp);
    }

    /**
     * 修改员工信息
     * @param emp
     * @return
     */
    @PutMapping("/emps")
    public Result update(@RequestBody Emp emp) {
        log.info("修改员工信息：{}", emp);
        empService.update(emp);
        return Result.success();
    }

    /**
     * 查询全部员工
     * @return
     */
    @GetMapping("/emps/list")
    public Result list() {
        log.info("查询全部员工信息:");
        List<Emp> emps =  empService.list();

        //3.响应数据（json格式）
        return Result.success(emps);

    }

    /**
     * 修改用户密码
     * @return
     */
    @PutMapping("/emps/changePassword")
    public Result changePassword(@RequestBody EmpPass empPass) {
        log.info("修改员工密码:{}",empPass);

        // 如何获取用户名
        empService.changePassword(empPass);

        return Result.success();
    }

}
